package com.xhj.mybatis.reflection;

/**
 * ReflectorFactory
 *
 * @author XJks
 * @description ReflectorFactory 接口用于创建和管理 Reflector 实例。Reflector 是 MyBatis 用于反射操作的工具类，能高效地获取类的属性和方法信息。TODO:主要作用是负责按类名缓存/创建 Reflector，避免重复解析，把“类的反射结构”变成一个可快速查询的索引表。
 */
public interface ReflectorFactory {

    /**
     * 判断是否启用类缓存。
     * 如果启用，ReflectorFactory 会缓存每个类对应的 Reflector 实例，提高性能。
     *
     * @return true 表示启用缓存，false 表示不启用
     */
    boolean isClassCacheEnabled();

    /**
     * 设置是否启用类缓存。
     *
     * @param classCacheEnabled true 启用缓存，false 不启用
     */
    void setClassCacheEnabled(boolean classCacheEnabled);

    /**
     * 获取指定类型的 Reflector 实例。
     * 如果启用了缓存，会优先从缓存中获取；否则每次都新建 Reflector。
     *
     * @param type 需要反射的类
     * @return 该类对应的 Reflector 实例
     */
    Reflector findForClass(Class<?> type);

    /**
     * TODO:ReflectorFactory 的单例实例，方便全局使用
     */
    ReflectorFactory GLOBAL_INSTANCE = new DefaultReflectorFactory();
}
